home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / tmc / aluneed.t < prev    next >
Text File  |  1990-11-02  |  8KB  |  251 lines

  1. .. File: aluneed.t
  2. .. CvR
  3. ..
  4. .. Analysis of required code for given set of routines.
  5. .. Given a list of wanted routines and ds definitions in the variable
  6. .. 'wantdefs', construct a list of wanted types for each class of definitions
  7. .. in the variables 'want_<classlist>', and 'want_<classlist>_list' where
  8. .. <classlist> is an element from the list below. Deduce the contents of the
  9. .. variables 'need_<classlist>'. Using knowledge about the definition of
  10. .. the various routines, deduce the required definitions and set them
  11. .. in the variables 'need_<classlist>'.
  12. ..
  13. .. The variables 'need_<classlist>' are restricted to types occurring
  14. .. in ${typelist} and $(otherlists).
  15. ..
  16. .. If the variable 'alldefs' is set, all the variables are simply set to
  17. .. ${typelist}.
  18. ..
  19. .. Some initial checks
  20. .set minvers 21
  21. .if ${< $(tmvers) $(minvers)}
  22. . error ${tplfilename}: at least tm version $(minvers) required.
  23. . exit 1
  24. .endif
  25. .if ${not ${defined basename}}
  26. . error '${tplfilename}': definition of basename required.
  27. . exit 1
  28. .endif
  29. .if ${and ${not ${defined alldefs}} ${not ${defined wantdefs}}}
  30. . error '${tplfilename}': no definitions specified.
  31. . error At least one of 'alldefs' and 'wantdefs' must be set.
  32. . exit 1
  33. .endif
  34. .if ${not ${defined otherlists}}
  35. .set otherlists
  36. .endif
  37. .if ${not ${defined notwantdefs}}
  38. .set notwantdefs
  39. .endif
  40. ..
  41. .. Define the list of definition classes
  42. .set    class      ds cmp new fre rfre rdup print fprint fscan
  43. .set    class_list ds cmp new fre rfre rdup print fprint fscan app room
  44. .append class_list conc append concat ins del
  45. .set misccode stat_$(basename) flush_$(basename)
  46. ..
  47. .. Reset all want_<classlist> variables
  48. .foreach v $(class)
  49. .set want_$v
  50. .endforeach
  51. .foreach v $(class_list)
  52. .set want_$v_list
  53. .endforeach
  54. .set want_misc
  55. ..
  56. .if ${defined alldefs}
  57. .. All classes want all types
  58. . foreach v $(class)
  59. .  set want_$v ${typelist}
  60. . endforeach
  61. . foreach v $(class_list)
  62. .  set want_$v_list ${typelist} $(otherlists)
  63. . endforeach
  64. . set want_misc $(misccode)
  65. .else
  66. .. Extract the contents of the 'want_<classlist>' variables from the
  67. .. 'wantdefs'.
  68. . set wantdefs ${uniq $(wantdefs)}
  69. . set gotdefs
  70. . foreach v ${rmlist ds $(class)}
  71. .  set fl ${comm ${prefix $v_ ${typelist}} "" $(wantdefs)}
  72. .  append gotdefs $(fl)
  73. .  set fl ${subs $v_(*) \1 $(fl)}
  74. .  append want_$v $(fl)
  75. . endforeach
  76. . set gl ${comm ${typelist} "" wantdefs}
  77. . append want_ds $(gl)
  78. . append gotdefs $(gl)
  79. . set lt ${suffix "_list" ${typelist} $(otherlists)}
  80. . foreach v ${rmlist ds $(class_list)}
  81. .  set fl ${comm ${prefix $v_ $(lt)} "" $(wantdefs)}
  82. .  append gotdefs $(fl)
  83. .  set fl ${subs $v_(*)_list \1 $(fl)}
  84. .  append want_$v_list $(fl)
  85. . endforeach
  86. . set fl ${comm $(lt) "" $(wantdefs)}
  87. . append gotdefs $(fl)
  88. . set fl ${subs (*)_list \1 $(fl)}
  89. . append want_ds_list $(fl)
  90. .if 0
  91. . foreach t ${typelist} $(otherlists)
  92. .  if ${index $t_list $(wantdefs)}
  93. .    append want_ds_list $t
  94. .    append gotdefs $t_list
  95. .  endif
  96. . endforeach
  97. .endif
  98. . foreach f $(misccode)
  99. .  if ${index $f $(wantdefs)}
  100. .   append want_misc $f
  101. .   append gotdefs $f
  102. .  endif
  103. . endforeach
  104. . set gotdefs ${uniq $(gotdefs)}
  105. . if ${!= ${len $(wantdefs)} ${len $(gotdefs)}}
  106. .  foreach e $(gotdefs)
  107. .   set wantdefs ${rmlist $e $(wantdefs)}
  108. .  endforeach
  109. .  error Can't handle definition: $(wantdefs)
  110. .  exit 1
  111. . endif
  112. .endif
  113. ..
  114. .. Initialize all need_<classlist> variables.
  115. .foreach v $(class)
  116. . set need_$v $(want_$v)
  117. .endforeach
  118. .foreach v $(class_list)
  119. . set need_$v_list $(want_$v_list)
  120. .endforeach
  121. .set need_misc $(want_misc)
  122. ..
  123. .. ** rdup **
  124. .set need_rdup ${deptype single $(need_rdup_list) $(need_rdup)}
  125. .set need_rdup_list ${uniq $(need_rdup_list) ${deptype list $(need_rdup)}}
  126. .set need_new ${uniq $(need_new) $(need_rdup)}
  127. .set need_new_list ${uniq $(need_new_list) $(need_rdup_list)}
  128. .set need_room_list ${uniq $(need_room_list) $(need_rdup_list)}
  129. .set need_append_list ${uniq $(need_append_list) $(need_rdup_list)}
  130. ..
  131. .. ** fscan **
  132. .set need_fscan ${deptype single $(need_fscan_list) $(need_fscan)}
  133. .set need_fscan_list ${uniq $(need_fscan_list) ${deptype list $(need_fscan)}}
  134. .set need_new ${uniq $(need_new) $(need_fscan)}
  135. .set need_new_list ${uniq $(need_new_list) $(need_fscan_list)}
  136. .set need_append_list ${uniq $(need_append_list) $(need_fscan_list)}
  137. ..
  138. .. ** print **
  139. .set need_print ${deptype single $(need_print_list) $(need_print)}
  140. .set need_print_list ${uniq $(need_print_list) ${deptype list $(need_print)}}
  141. .set need_ds ${uniq $(need_ds) $(need_print)}
  142. .set need_ds_list ${uniq $(need_ds_list) $(need_print_list)}
  143. ..
  144. .. ** fprint **
  145. .set need_fprint ${deptype single $(need_fprint_list) $(need_fprint)}
  146. .set need_fprint_list ${uniq $(need_fprint_list) ${deptype list $(need_fprint)}}
  147. .set need_ds ${uniq $(need_ds) $(need_fprint)}
  148. .set need_ds_list ${uniq $(need_ds_list) $(need_fprint_list)}
  149. ..
  150. .. ** cmp **
  151. .set need_cmp ${deptype single $(need_cmp_list) $(need_cmp)}
  152. .set need_cmp_list ${uniq $(need_cmp_list) ${deptype list $(need_cmp)}}
  153. .set need_ds ${uniq $(need_ds) $(need_cmp)}
  154. .set need_ds_list ${uniq $(need_ds_list) $(need_cmp_list)}
  155. ..
  156. .. ** app **
  157. .set need_room_list ${uniq $(need_room_list) $(need_app_list)}
  158. .set need_ds_list ${uniq $(need_ds_list) $(need_app_list)}
  159. ..
  160. .. ** append **
  161. .set need_room_list ${uniq $(need_room_list) $(need_append_list)}
  162. .set need_ds_list ${uniq $(need_ds_list) $(need_append_list)}
  163. ..
  164. .. ** conc **
  165. .set need_fre_list ${uniq $(need_fre_list) $(need_conc_list)}
  166. .set need_room_list ${uniq $(need_room_list) $(need_conc_list)}
  167. ..
  168. .. ** concat **
  169. .set need_fre_list ${uniq $(need_fre_list) $(need_concat_list)}
  170. .set need_room_list ${uniq $(need_room_list) $(need_concat_list)}
  171. ..
  172. .. ** ins **
  173. .set need_room_list ${uniq $(need_room_list) $(need_ins_list)}
  174. ..
  175. .. ** del **
  176. .set need_rfre_list ${uniq $(need_rfre_list) $(need_del_list)}
  177. .set need_room_list ${uniq $(need_room_list) $(need_del_list)}
  178. ..
  179. .. ** room **
  180. .set need_ds_list ${uniq $(need_ds_list) $(need_room_list)}
  181. ..
  182. .. ** rfre **
  183. .set need_rfre ${deptype single ${uniq $(need_rfre) $(need_rfre_list)}}
  184. .set need_rfre_list ${uniq $(need_rfre_list) ${deptype list $(need_rfre)}}
  185. .set need_fre ${uniq $(need_fre) $(need_rfre)}
  186. .set need_fre_list ${uniq $(need_fre_list) $(need_rfre_list)}
  187. ..
  188. .. ** fre **
  189. .set need_ds ${uniq $(need_ds) $(need_fre)}
  190. .set need_ds_list ${uniq $(need_ds_list) $(need_fre_list)}
  191. ..
  192. .. ** new **
  193. .set need_ds ${uniq $(need_ds) $(need_new)}
  194. .set need_ds_list ${uniq $(need_ds_list) $(need_new_list)}
  195. ..
  196. .. ** ds **
  197. .set need_ds ${deptype single $(need_ds) $(need_ds_list)}
  198. .set need_ds_list ${uniq $(need_ds_list) ${deptype list $(need_ds)}}
  199. ..
  200. .. Enforce notwantdefs
  201. .set notwantdefs ${uniq $(notwantdefs)}
  202. .if ${len $(notwantdefs)}
  203. . foreach v ${rmlist ds $(class)}
  204. .  foreach t $(need_$v)
  205. .   if ${index $v_$t $(fl)}
  206. .    set need_$v ${rmlist $t $(need_$v)}
  207. .    set want_$v ${rmlist $t $(want_$v)}
  208. .   endif
  209. .  endforeach
  210. . endforeach
  211. . foreach t $(need_ds)
  212. .  if ${index $t $(notwantdefs)}
  213. .   set need_ds ${rmlist $t $(need_ds)}
  214. .   set want_ds ${rmlist $t $(want_ds)}
  215. .  endif
  216. . endforeach
  217. . foreach v ${rmlist ds $(class_list)}
  218. .  foreach t $(need_$v_list)
  219. .   if ${index $v_$t_list $(notwantdefs)}
  220. .    set need_$v_list ${rmlist $t $(need_$v_list)}
  221. .    set want_$v_list ${rmlist $t $(want_$v_list)}
  222. .   endif
  223. .  endforeach
  224. . endforeach
  225. . foreach t $(need_$v_list)
  226. .  if ${index $t_list $(notwantdefs)}
  227. .   set need_ds_list ${rmlist $t $(need_ds_list)}
  228. .   set want_ds_list ${rmlist $t $(want_ds_list)}
  229. .  endif
  230. . endforeach
  231. . foreach f $(misccode)
  232. .  if ${index $f $(notwantdefs)}
  233. .   set need_misc ${rmlist $f $(need_misc)}
  234. .   set want_misc ${rmlist $f $(want_misc)}
  235. .  endif
  236. . endforeach
  237. .endif
  238. ..
  239. .. ** derived definitions **
  240. .if ${index stat_$(basename) $(need_misc)}
  241. .set need_stat ${uniq $(need_new) $(need_fre)}
  242. .set need_stat_list ${uniq $(need_new_list) $(need_fre_list)}
  243. .set want_stat ${uniq $(want_new) $(want_fre)}
  244. .set want_stat_list ${uniq $(want_new_list) $(want_fre_list)}
  245. .else
  246. .set need_stat
  247. .set need_stat_list
  248. .set want_stat
  249. .set want_stat_list
  250. .endif
  251.